/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo.patologias;

import hibernate.Busqueda;
import java.util.HashMap;
import java.util.List;
import modelo.CriterioBusqueda;
import modelo.GestorModelo;
import modelo.personas.pacientes.GestorParentesco;

/**
 *
 * @author raul
 */
public class GestorEnfermedad extends GestorModelo<Enfermedad> {
    
    private HashMap<String, String> mapFiltros;
    
    public GestorEnfermedad(){
        mapFiltros = new HashMap();
        mapFiltros.put("Nombre", "nombre");
        mapFiltros.put("Tipo Enfermedad Busq", "tde.nombre");
        mapFiltros.put("Sintomas Busq", "sin.nombre");
    }

    @Override
    protected Enfermedad clonar(Enfermedad modelo) throws CloneNotSupportedException {
        return modelo.clone();
    }

    @Override
    public void eliminar() {
        getModelo().setEstado(ELIMINADO);
        super.actualizar();
    }

    @Override
    public void crearModelo() {
        super.setModelo(new Enfermedad());
    }

    @Override
    public boolean noExiste() {
        Busqueda busq = new Busqueda(Enfermedad.class);
        busq.addEq("nombre", getModelo().getNombre());
        return busq.ejecutar().isEmpty();
    }
    
    public List listarTiposEnfermedad(){
        return super.listarClase(TipoEnfermedad.class);
    }

    public List listarEnfermedades() {
        return super.listarClase(Enfermedad.class);
    }
    
    public List listarSintomas() {
        return super.listarClase(Sintoma.class);
    }

    public void agregarSintomas(List sintomas) {
        getModelo().getSintomas().addAll(sintomas);
        getModelo().getSintomas().retainAll(sintomas);
    }

    public void setParentescosTransmisores(List parentescosTransmisores) {
        getModelo().getParentescosTransmisores().addAll(parentescosTransmisores);
        getModelo().getParentescosTransmisores().retainAll(parentescosTransmisores);
    }
    
    public List buscar(String filtro, String valor){
        Busqueda busq = new Busqueda(Enfermedad.class);
        busq.addEq("estado", ACTIVO);
        busq.addIlike(mapFiltros.get(filtro), valor);
        busq.agregarOrdenAsc("nombre");
        return busq.ejecutar();
    }

    @Override
    public List buscar(CriterioBusqueda[] criterios) {
        Busqueda busq = new Busqueda(Enfermedad.class);
        busq.crearAlias("sintomas", "sin");
        busq.crearAlias("tipoEnfermedad", "tde");
        super.addRestricciones(busq, criterios, mapFiltros);
        return busq.ejecutar();
    }

    public List listarParentescos() {
        return (new GestorParentesco()).listarParentescos();
    }

    public Enfermedad buscarPorId(Long id) {
        Busqueda busq = new Busqueda(Enfermedad.class);
        busq.addEq("id", id);
        return (Enfermedad) busq.ejecutarUnique();
    }

    public List buscarEnfermedadesPorId(List<Long> ids) {
        Busqueda b = new Busqueda(Enfermedad.class);
        b.addIn("id", ids);
        return b.ejecutar();
    }
    
}
